/**
 * @param {string} s
 * @return {number}
 */
// 记录每个字符连续出现的次数，通过数组
// 要想出现三次，且最长。从大到小排序，只用考虑数组的前三个元素
// 考虑第一个：能得到的最大值为当前元素 - 2
// 考虑前两个：如果a[0] > a[1]，最大值为a[1]，a[0] = a[1]，最大值a[0] - 1。综合考虑取最小
// 考虑前三个：直接取第三个值。
// 然后三种情况取最大
var maximumLength = function(s) {
  const map = {}
   let count = 1
   s += '#'
   for (let i = 0; i < s.length - 1; i++) {
     if (s[i] === s[i + 1]) count++
     else {
       if (map[s[i]] === undefined) {
         map[s[i]] = []
       }
       map[s[i]].push(count)
       count = 1
     }
   }
   let max = 0
   Object.keys(map).forEach(k => {
    // 将数组从大到小排序
    map[k].sort((a, b) => b - a)
    // 防止数组长度小于3，这里是绝杀
    map[k].push(0, 0)
    max = Math.max(max, map[k][0] - 2,Math.min(map[k][0] - 1, map[k][1]), map[k][2])
   })
   return max ? max : -1
 };